//
//  Line3D.cpp
//  C3W_Demo_By_Fan
//
//  Created by 范静涛 on 2024/7/23.
//

//------------------------------------------------------------------------------
//【文件名】Line3D.cpp
//【功能模块和目的】三维直线段类实现
//【开发者及日期】范静涛 2024/7/23
//【更改记录】
//------------------------------------------------------------------------------

//自身类头文件
#include "Line3D.hpp"
//Point3D类所属头文件
#include "Point3D.hpp"

//------------------------------------------------------------------------------
//必要的构造、析构、赋值行为
//------------------------------------------------------------------------------

//函数名：Line3D
//功能：带参构造函数。根据P1和P2，手动触发基类带参构造函数。
//     如P1和P2重复，基类构造抛出异常
//入口参数：const Point3D& P1, const Point3D& P2
//出口参数：无
//返回值：无
Line3D::Line3D(const Point3D& P1, const Point3D& P2)
: Element3D_FixedPoints(std::vector<Point3D>{P1, P2}, 2){
}
//------------------------------------------------------------------------------

//函数名：Line3D
//功能：拷贝构造函数
//入口参数：const Line3D& Source
//出口参数：无
//返回值：无
Line3D::Line3D(const Line3D& Source) : Element3D_FixedPoints(Source) {
}
//------------------------------------------------------------------------------

//函数名：operator=
//功能：赋值运算符overload
//入口参数：const Line3D& Source
//出口参数：无
//返回值：无
Line3D& Line3D::operator=(const Line3D& Source){
    if (this != &Source) {
        Element3D_FixedPoints::operator=(Source);
    }
    return *this;
}
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
//非静态Getter成员函数：需检查所有Getter是否有后置const
//------------------------------------------------------------------------------

//函数名：Area const
//功能：求面积override
//入口参数：无
//出口参数：无
//返回值：一定为0
double Line3D::Area() const{
    return 0.0;
}
//------------------------------------------------------------------------------

//函数名：Length const
//功能：求长度override
//入口参数：无
//出口参数：无
//返回值：两点间距离
double Line3D::Length() const{
    //实质是向量的长度
    return (Points[0] - Points[1]).Length();
}
//------------------------------------------------------------------------------

